Проверка статуса репликации
------------------------------------------------------------------------------

Проверка статуса репликации утилитой dsconf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Чтобы получить детальную информацию по соглашениям о репликации текущего сервера, нужно выполнить следующую команду:

.. code-block:: console

    sudo dsconf -j ALD-COMPANY-LAN replication status --suffix dc=ald,dc=company,dc=lan

Информация будет предоставлена в json-формате:

.. code-block:: json

    {
        "type": "list", "items": [{
            "agmt-name": ["meTodc-2.ald.company.lan"],
            "replica": ["dc-2.ald.company.lan:389"],
            "replica-enabled": ["on"],
            "update-in-progress": ["FALSE"],
            "last-update-start": ["20230824143651Z"],
            "last-update-end": ["20230824143651Z"],
            "number-changes-sent": ["4:25/723 5:1/0 "],
            "number-changes-skipped": ["unavailable"],
            "last-update-status": ["Error (0) Replica acquired successfully: Incremental update succeeded"],
            "last-init-start": ["20230824120948Z"],
            "last-init-end": ["20230824120954Z"],
            "last-init-status": ["Error (0) Total update succeeded"],
            "reap-active": ["0"],
            "replication-status": ["Not in Synchronization: supplier (64e76843000000040000) consumer (Unavailable) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded)"],
            "replication-lag-time": ["unavailable"]
        }]
    }

Полученную информацию можно представить в формате таблицы, но потребуется установить пакет ``jq`` и использовать комплексную команду форматирования, которую можно сохранить в виде скрипта:

.. code-block:: console

    sudo apt install jq -y

    (printf 'SUFFIX \tAGREEMENT \tSTATE \tTIME-SINCE \tLDAP-STATUS \tREPL-STATUS \n'; sudo dsconf -j ALD-COMPANY-LAN replication list | jq '.items[]' -r | xargs -P8 -i -- sudo dsconf -j ALD-COMPANY-LAN repl-agmt list --suffix={} | jq '.items[].attrs | (.nsds5replicalastupdatestatusjson[0] | fromjson) as $status | [.nsds5replicaroot[0], .cn[0], $status.state, $status.date, $status.ldap_rc_text, $status.repl_rc_text] | @tsv' -r | sort ) | column -s$'\t' -t

Результат выполнения команды см. на :ref:`13_replication-agreements`.

.. figure:: 13_replication-agreements-table.png
    :name: 13_replication-agreements
    :scale: 50

    Состояние соглашений о репликации в табличном виде

Также, присутствует возможность с помощью команды ``replication monitor`` утилиты ``dsconf`` собрать информацию сразу со всех контроллеров домена, но в состоянии репликации не будет указан агрегированный статус, что затруднит анализ:

.. code-block:: console

    sudo dsconf ldap://localhost:389 replication monitor

Для каждого сервера в домене нужно следует ввести учетные данные пользователя ``cn=Directory Manager``:

.. code-block:: console
    
    Enter Bind DN: cn=Directory Manager
    Enter password for cn=Directory Manager on ldap://localhost:389: *****
    
    Enter a bind DN for dc-2.ald.company.lan:389: cn=Directory Manager
    Enter a password for cn=Directory Manager on dc-2.ald.company.lan:389: *****

Чтобы не вводить учетные данные каждый раз вручную, на рабочей станции администратора их можно определить в текстовом файле ``~/.dsrc``:

.. code-block:: console

    [repl-monitor-connections]
    connection1 = dc-1.ald.company.lan:389:cn=Directory Manager:*
    connection2 = dc-2.ald.company.lan:389:cn=Directory Manager:[~/pwd.txt]
    connection3 = dc-3.ald.company.lan:389:cn=Directory Manager:S3cret

Где:

* для dc-1 будет запрошен пароль;
* для dc-2 пароль будет взят из файла ``pwd.txt``;
* для dc-3 в качестве пароля будет использована строка ``S2cret``.

Проверка репликации с помощью скриптов checkipaconsistency
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. attention::

    В данном разделе представлена информация о том, как можно проверить целостность домена с использованием модуля **checkipaconsistency** из публичного pip-репозитория, установка которого в продуктивных средах без дополнительной проверки скриптов категорически запрещается.

Рекомендуется сначала проверить текущую версию Python, по умолчанию устанавливается **3.7.3**:

.. code-block:: console

    sudo python3 -V
    Python 3.7.3

Следует скачать установочный файл системы управления пакетами ``pip`` соответствующей версии:

.. code-block:: console

    wget https://bootstrap.pypa.io/pip/3.7/get-pip.py

    --2024-11-25 10:44:34--  https://bootstrap.pypa.io/pip/3.7/get-pip.py
    Распознаётся bootstrap.pypa.io (bootstrap.pypa.io)… 151.101.84.175, 2a04:4e42:14::175
    Подключение к bootstrap.pypa.io (bootstrap.pypa.io)|151.101.84.175|:443... соединение установлено.
    HTTP-запрос отправлен. Ожидание ответа… 200 OK
    Длина: 2636033 (2,5M) [text/x-python]
    Сохранение в: «get-pip.py»

    get-pip.py                                     100%[================================================================>]   2,51M  5,32MB/s    за 0,5s    

    2024-11-25 10:44:35 (5,32 MB/s) - «get-pip.py» сохранён [2636033/2636033]

Далее устанавливается ``pip``:

.. code-block:: console

    sudo python3 ./get-pip.py 

    Collecting pip<24.1
    Downloading pip-24.0-py3-none-any.whl.metadata (3.6 kB)
    Collecting wheel
    Downloading wheel-0.42.0-py3-none-any.whl.metadata (2.2 kB)
    Downloading pip-24.0-py3-none-any.whl (2.1 MB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 4.4 MB/s eta 0:00:00
    Downloading wheel-0.42.0-py3-none-any.whl (65 kB)
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.4/65.4 kB 1.3 MB/s eta 0:00:00
    DEPRECATION: python-apt 1.8.4.3-ci202309111239-astra1-b1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-apt or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063
    Installing collected packages: wheel, pip
    Successfully installed pip-24.0 wheel-0.42.0
    WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

Затем модуль ``checkipaconsistency``:

.. code-block:: console
    
    sudo python3 -m pip install checkipaconsistency

    Collecting checkipaconsistency
    Downloading checkipaconsistency-2.7.10-py2.py3-none-any.whl.metadata (9.6 kB)
    Collecting pplogger (from checkipaconsistency)
    Downloading pplogger-4.2.0-py2.py3-none-any.whl.metadata (1.4 kB)
    Requirement already satisfied: python-ldap in /usr/lib/python3/dist-packages (from checkipaconsistency) (3.1.0)
    Collecting prettytable (from checkipaconsistency)
    Downloading prettytable-3.7.0-py3-none-any.whl.metadata (26 kB)
    Requirement already satisfied: dnspython in /usr/lib/python3/dist-packages (from checkipaconsistency) (1.16.0)
    Collecting importlib-metadata (from prettytable→checkipaconsistency)
    Downloading importlib_metadata-6.7.0-py3-none-any.whl.metadata (4.9 kB)
    Collecting wcwidth (from prettytable→checkipaconsistency)
    Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
    Collecting zipp>=0.5 (from importlib-metadata→prettytable→checkipaconsistency)
    Downloading zipp-3.15.0-py3-none-any.whl.metadata (3.7 kB)
    Collecting typing-extensions>=3.6.4 (from importlib-metadata→prettytable→checkipaconsistency)
    Downloading typing_extensions-4.7.1-py3-none-any.whl.metadata (3.1 kB)
    Downloading checkipaconsistency-2.7.10-py2.py3-none-any.whl (24 kB)
    Downloading pplogger-4.2.0-py2.py3-none-any.whl (14 kB)
    Downloading prettytable-3.7.0-py3-none-any.whl (27 kB)
    Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
    Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
    Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
    Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
    DEPRECATION: python-apt 1.8.4.3-ci202309111239-astra1-b1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-apt or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063
    Installing collected packages: wcwidth, pplogger, zipp, typing-extensions, importlib-metadata, prettytable, checkipaconsistency
    Successfully installed checkipaconsistency-2.7.10 importlib-metadata-6.7.0 pplogger-4.2.0 prettytable-3.7.0 typing-extensions-4.7.1 wcwidth-0.2.13 zipp-3.15.0
    WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

При установке модуля в системе будет создан скрипт ``/usr/local/bin/cipa``, который позволит запускать утилиту в одну строку. Учитывая, что пароль нужно передавать утилите открытым текстом, важно не забыть поставить дополнительный пробел перед именем утилиты ``cipa`` или отключить ведение истории:

.. code-block:: console
    
    set +o history
    cipa -d ald.company.lan -W 'AstraLinux_176'

    +--------------------+---------+---------+-------+
    | FreeIPA servers:   | dc-1    | dc-2    | STATE |
    +--------------------+---------+---------+-------+
    | Active Users       | 1       | 1       | OK    |
    | Stage Users        | 0       | 0       | OK    |
    | Preserved Users    | 0       | 0       | OK    |
    | Hosts              | 2       | 2       | OK    |
    | Services           | 10      | 10      | OK    |
    | User Groups        | 6       | 6       | OK    |
    | Host Groups        | 1       | 1       | OK    |
    | Netgroups          | 0       | 0       | OK    |
    | HBAC Rules         | 2       | 2       | OK    |
    | SUDO Rules         | 0       | 0       | OK    |
    | DNS Zones          | 2       | 2       | OK    |
    | Certificates       | 0       | 0       | OK    |
    | LDAP Conflicts     | 0       | 0       | OK    |
    | Ghost Replicas     | 0       | 0       | OK    |
    | Anonymous BIND     | ROOTDSE | ROOTDSE | OK    |
    | Microsoft ADTrust  | True    | True    | OK    |
    | Replication Status | dc-2 0  | dc-1 0  | OK    |
    +--------------------+---------+---------+-------+
